// API使用示例

// 引入方式1：按需导入
import { userApi, todoApi, tagApi } from '@/api'

// 引入方式2：全部导入
import api from '@/api'

// 引入方式3：直接导入request工具
import http from '@/utils/request.js'

// ===== 用户相关API使用示例 =====

// 用户登录
export const handleLogin = async (loginData) => {
  try {
    const result = await userApi.login(loginData)
    // 登录成功，保存token和用户信息
    uni.setStorageSync('token', result.data.token)
    uni.setStorageSync('userInfo', result.data.userInfo)
    return result
  } catch (error) {
    console.error('登录失败:', error)
    throw error
  }
}

// 获取用户信息
export const getUserProfile = async () => {
  try {
    const result = await userApi.getUserInfo()
    return result.data
  } catch (error) {
    console.error('获取用户信息失败:', error)
    throw error
  }
}

// 上传头像
export const uploadUserAvatar = async (filePath) => {
  try {
    const result = await userApi.uploadAvatar(filePath)
    return result.data
  } catch (error) {
    console.error('上传头像失败:', error)
    throw error
  }
}

// ===== 待办事项相关API使用示例 =====

// 获取待办列表
export const getTodoList = async (params = {}) => {
  try {
    const result = await todoApi.getTodoList(params)
    return result.data
  } catch (error) {
    console.error('获取待办列表失败:', error)
    throw error
  }
}

// 创建待办
export const createNewTodo = async (todoData) => {
  try {
    const result = await todoApi.createTodo(todoData)
    uni.showToast({
      title: '创建成功',
      icon: 'success'
    })
    return result.data
  } catch (error) {
    console.error('创建待办失败:', error)
    throw error
  }
}

// 更新待办状态
export const updateTodoStatus = async (todoId, completed) => {
  try {
    const result = await todoApi.toggleComplete(todoId, completed)
    return result.data
  } catch (error) {
    console.error('更新待办状态失败:', error)
    throw error
  }
}

// 删除待办
export const deleteTodoItem = async (todoId) => {
  try {
    const result = await todoApi.deleteTodo(todoId)
    uni.showToast({
      title: '已移到回收站',
      icon: 'success'
    })
    return result.data
  } catch (error) {
    console.error('删除待办失败:', error)
    throw error
  }
}

// ===== 标签相关API使用示例 =====

// 获取标签列表
export const getTagList = async () => {
  try {
    const result = await tagApi.getTagList()
    return result.data
  } catch (error) {
    console.error('获取标签列表失败:', error)
    throw error
  }
}

// 创建标签
export const createNewTag = async (tagData) => {
  try {
    const result = await tagApi.createTag(tagData)
    return result.data
  } catch (error) {
    console.error('创建标签失败:', error)
    throw error
  }
}

// ===== 在Vue组件中的使用示例 =====

// 在页面或组件的setup函数中使用
export const useApiExample = () => {
  // 在组件中使用API的示例
  const loadData = async () => {
    try {
      // 并发请求多个接口
      const [todoResult, tagResult] = await Promise.all([
        todoApi.getTodoList({ page: 1, pageSize: 20 }),
        tagApi.getTagList()
      ])
      
      return {
        todos: todoResult.data,
        tags: tagResult.data
      }
    } catch (error) {
      console.error('加载数据失败:', error)
      uni.showToast({
        title: '加载失败',
        icon: 'error'
      })
    }
  }

  // 搜索功能示例
  const searchTodos = async (keyword) => {
    try {
      const result = await todoApi.searchTodos(keyword, {
        page: 1,
        pageSize: 20
      })
      return result.data
    } catch (error) {
      console.error('搜索失败:', error)
      throw error
    }
  }

  return {
    loadData,
    searchTodos
  }
}

// ===== 错误处理示例 =====

// 统一错误处理
export const handleApiError = (error) => {
  if (error.message.includes('登录已过期')) {
    // 已在request拦截器中处理，这里可以做额外操作
    console.log('用户需要重新登录')
  } else if (error.message.includes('网络')) {
    // 网络错误处理
    uni.showModal({
      title: '网络错误',
      content: '请检查网络连接后重试',
      showCancel: false
    })
  } else {
    // 其他错误
    console.error('API错误:', error)
  }
}

// ===== 直接使用request工具的示例 =====

// 如果需要调用未封装的接口
export const customApiCall = async () => {
  try {
    const result = await http.get('/custom/endpoint', {
      param1: 'value1',
      param2: 'value2'
    })
    return result.data
  } catch (error) {
    console.error('自定义API调用失败:', error)
    throw error
  }
} 